package com.edu.exam.enums.grading;

import com.edu.exam.enums.core.BaseEnum;

import java.util.Arrays;

/**
 * 统计类型枚举
 *
 * 用于标识批阅统计的类型分类，支持多种时间粒度和用途的统计维度
 *
 * @author System
 * @version 1.0.0
 */
public enum StatType implements BaseEnum {

    /**
     * 日统计 - 按天进行批阅数据统计
     */
    DAILY("DAILY", "日统计"),

    /**
     * 周统计 - 按周进行批阅数据统计
     */
    WEEKLY("WEEKLY", "周统计"),

    /**
     * 月统计 - 按月进行批阅数据统计
     */
    MONTHLY("MONTHLY", "月统计"),

    /**
     * 考试统计 - 针对单次考试的批阅统计
     */
    EXAM("EXAM", "考试统计"),

    /**
     * 任务统计 - 针对特定批阅任务的统计
     */
    TASK("TASK", "任务统计"),

    /**
     * 季度统计 - 按季度进行批阅数据统计
     */
    QUARTERLY("QUARTERLY", "季度统计"),

    /**
     * 年度统计 - 按年度进行批阅数据统计
     */
    YEARLY("YEARLY", "年度统计"),

    /**
     * 自定义统计 - 用户自定义时间范围的统计
     */
    CUSTOM("CUSTOM", "自定义统计");

    private final String code;
    private final String description;

    StatType(String code, String description) {
        this.code = code;
        this.description = description;
    }

    @Override
    public String getCode() {
        return code;
    }

    @Override
    public String getDescription() {
        return description;
    }

    /**
     * 根据编码获取枚举
     */
    public static StatType fromCode(String code) {
        return Arrays.stream(values())
                .filter(e -> e.code.equals(code))
                .findFirst()
                .orElseThrow(() -> new IllegalArgumentException("Unknown stat type code: " + code));
    }

    /**
     * 根据描述获取枚举
     */

    @Override
    public String toString() {
        return description;
    }
}